跳至主要内容

🤖 客製化你的AI教學助手-蘇格拉底引導教學法

· 閱讀時間約 9 分鐘
Willis Chen

老師們現在不僅對教學充滿熱情,也愈來愈善於運用科技工具,如LINE官方帳號,來與學生和家長保持緊密的溝通。這些努力無疑是朝著以下兩大目標邁進:

  1. 激發學生的好奇心:鼓勵學生主動提問,並引導他們思考解決問題的方法。
  2. 個別化教學:深入了解每位學生的學習進度和思維方式,以因材施教。

🤖 專案介紹

這個專案的核心目的是要讓老師們能在已有的LINE官方帳號上,快速加入一個AI助教—使用ChatGPT技術。這樣一來,AI助教能夠第一時間回應學生的問題,如果遇到AI不能解決的問題,它還會建議學生直接聯繫老師。這讓老師有更多的時間和空間來專注於其他重要的教學任務。

🛠️ 如何開始?

這個專案極力降低相關的技術門檻。實際上,在幾乎不需要寫任何程式碼的情況下,老師就能設置起這個AI助教服務。你只需完成以下幾個簡單的步驟:

  1. 註冊本服務
  2. 在LINE官方帳號後台進行相應設定
  3. 啟用ChatGPT作為你的AI助教

完成以上步驟後,你就能讓ChatGPT開始擔任你的AI助教,預先回答學生的問題。

👉 歡迎各位老師運用,打造更智慧、更高效、教學相長的教學環境!

📚 在開始之前,你需要了解的

在你開始使用這個專案之前,有一些基礎的技術和費用信息你需要知道。

技術環境

  • 涉及的技術和環境如下:
    • 程式語言: Python
    • 伺服器後端框架: Flask
    • FaaS雲端服務: Vercel
    • AI對話功能: OpenAI API (ChatGPT-3.5-tubo)
    • 聊天環境: LINE (LINE Message API)

花費預估

  • Vercel

    • Hobby方案允許你免費建立最多3個專案。
    • 注意:如果伺服器處理時間超過10秒,將會被判定為Time Out。
    • Vercel 費用詳情
  • OpenAI API

    • 初次註冊有免費額度,API使用需綁信用卡。
    • 本專案預設使用的是2023/11釋出的 GPT-4-1106-preview
    • OpenAI 費用詳情
    • OpenAI Cost
  • LINE 主動訊息

    • 額度內免費,目前是200則訊息(2023/9月前為500則)。
    • 由使用者提問的回覆(Reply)免費。
    • 老師主動發送的訊息(Push)有200則限制。
    • LINE 費用詳情
    • LINE Cost1
    • LINE Cost2

    提醒您: 所有的費用和限制可能會隨著各個服務供應商的政策改變而變動,建議定期查看官方網站以獲取最新資訊。

如何建立自己的 LINE AI助教?

這份指南將引領您從LINE 官方帳號開始,不同於開發者通常從 LINE Developers 開始。不過,不管從哪裡出發,最終目標相同:建立一個集成 ChatGPT 的 LINE 官方帳號。

🌟 步驟1:初始化 LINE 官方帳號 🌟

首先,我們需要建立一個基本的、無AI功能的 LINE 官方帳號。學生們可以即刻加入這個帳號。這個帳號初期僅支持手動聊天,AI 功能將在後續逐步加入。

  1. 前往 LINE 官方帳號管理頁面

  2. 填寫必要資訊:這些資訊也會是學生看到的名稱。

  3. 選擇「稍後認證官方帳號」:這個認證過程不會影響本專案。

  4. (選擇性)建立圖文選單:利用圖文選單可提供班級公告、相片集等。

    • 主頁 > 圖文選單 > 參考說明
  5. 啟用 Webhook 🔗

    • Webhook 是一個可用程式處理訊息的通道。
    • 通過 Webhook,我們將使用 Vercel 平台、Python Flask 框架和 OpenAI API。

🌟 步驟2:註冊必要的平台並獲取 API Token

  1. 註冊必要平台:包括 GitHubVercelOpenAI APILINE Developers
  2. 獲取 OpenAI API Token:保存好這個 Token,它是一次性的。

🌟 步驟3:設置 LINE Developer Channel 及獲取 Secret, Token 🌟

3.1 獲取 Channel Secret 🔒

  • 從 LINE 官方帳號或 LINE Developer Channel 都可獲取。

3.2 獲取 Channel Access Token 🔑

  • 在 LINE Developer Channel 下生成。

🌟 步驟4:Fork GitHub 專案 🌟

  • Fork 這個專案至您自己的 GitHub 儲存庫。

🌟 步驟5:部署至 Vercel 🌟

  1. 建立 Vercel 專案
  2. 連接 GitHub 和選擇專案
  3. 設定環境變數並部署
  • 您需要設定的環境變數為OPENAI_API_KEYLINE_CHANNEL_ACCESS_TOKENLINE_CHANNEL_SECRET,在這裡的環境變數能受到較佳的保護,至少比放在程式碼裡安全許多。

  1. 修正支援的Nodejs版本
  • 如果遇到Python安裝版本問題,依據官方文件,Vercel預設的Node.js版本為20.x,不支援Python,請在專案的設定>一般的選項裡,將Node.js改選為18.x版本。 image

  • 修改後請選擇部署,或到專案的佈署歷程中選擇再次部署,就會改用Node.js 18.x版再跑一次。 image

🎉 完成! 🎉

恭喜您,現在您已經成功建立了自己的 AI 助教!現在可以透過 LINE 官方帳號進行測試。

🔧 進階設定:打造個性化的AI助手

  • 若要讓AI助手更符合你的需求和風格,OpenAI API提供了一個彈性的方式讓你自行設定AI的角色。具體來說,你只需要在對話設定中添加 messages: [{ role: "system", content: "你的AI助手人設" }] 即可。
  • 進行這項設定只需前往api/prompt.py並在AI_GUIDELINES後修改提示文字即可。不過,因為Vercel的免費版有10秒的運行時限制,過長的提示可能會導致Time Out,因此建議不要設置過於複雜的指引。
  • 本專案經過精心測試後,已經內建一組最佳實踐的AI_GUIDELINES,但你也可以隨心所欲地進行調整:
    AI_GUIDELINES = '你是一個AI助教,專門使用蘇格拉底教學法來回答學生的問題,如果有需要,會建議學生與老師進一步確認。'
  • 修改方式也非常簡單,只需登入你的GitHub帳號,找到該專案的api/prompt.py文件,點擊右側的鋼筆圖示✏️即可進行線上編輯。 編輯
  • 完成後,選擇“Commit Changes”並填入適當的描述。 提交更改 描述

🚀 專案成果

  • 出色的問答回應: 這個AI助手自2023年11月7日OpenAI大幅降低費率後,採用GPT 4模型,更能通順的、即時地回應學生的問題。 出色回應

  • 問題過濾: 對於需要更深層次討論的問題,AI助手會提供適當的處理建議,協助老師過濾和分類問題,同時也啟發老師改進教學。 問題過濾

  • 引導學生思考: 透過蘇格拉底教學法,AI助手不僅回答問題,還能引導學生學會如何提問和解決問題。

    同學A 老師我想要問BMI的python程式怎麼寫
    ----
    AI助教 嗨!關於BMI的Python程式,我可以幫你一起思考。首先,你知道BMI是什麼嗎?
    ----
    同學A BMI=體重/身高平方
    ----
    AI助教 沒錯!BMI是體重除以身高的平方。那麼,你想要寫一個計算BMI的Python程式對吧?你已經有身高和體重的數值了嗎?
    ----
    同學A 70/(1.73**2)
    ----
    AI助教 沒錯!你可以使用這個公式來計算BMI。現在我們可以開始寫一個Python程式來計算BMI。你想要將身高和體重作為變數輸入嗎?
    ----
    同學A 想
    ----
    AI助教 好的!我們可以寫一個簡單的Python函數來計算BMI。以下是一個範例程式碼:

    ```python
    def calculate_bmi(weight, height):
    bmi = weight / (height ** 2)
    return bmi

    weight = float(input("請輸入您的體重(公斤):"))
    height = float(input("請輸入您的身高(公尺):"))

    bmi = calculate_bmi(weight, height)
    print("您的BMI為:", bmi)
    ```

    這個程式會要求使用者輸入體重和身高,然後使用`calculate_bmi`函數計算BMI並輸出結果。請注意,身高的單位應該是公尺,體重的單位應該是公斤。
    ----
    同學A 請幫我也寫出測試碼,之後會用pytest測試
    ----
    AI助教 當然!我們可以寫一些測試碼來驗證我們的BMI計算函數是否正確。以下是一個範例的測試碼:

    ```python
    import pytest

    def calculate_bmi(weight, height):
    bmi = weight / (height ** 2)
    return bmi

    def test_calculate_bmi():
    assert calculate_bmi(70, 1.73) == pytest.approx(23.39, 0.01)
    assert calculate_bmi(80, 1.65) == pytest.approx(29.38, 0.01)
    assert calculate_bmi(60, 1.80) == pytest.approx(18.52, 0.01)

    if __name__ == "__main__":
    pytest.main()
    ```

    這個測試碼使用了pytest套件來執行測試。我們定義了一個`test_calculate_bmi`函數,其中包含了幾個斷言語句,用來驗證`calculate_bmi`函數的輸出是否符合預期。每個斷言語句都使用了`pytest.approx`函數來比較浮點數的近似值,並指定了一個容忍誤差範圍。

    你可以將這個測試碼保存為一個.py檔案,然後使用pytest運行測試。如果所有的測試通過,則表示你的BMI計算函數正確無誤。
    ----
    同學A 謝謝老師,我的超人
    ----
    AI助教 不客氣!如果你有任何其他問題,隨時都可以問我。祝你一切順利!

    培養思考 成果展示 更多示例

專案成果

  1. 出色的回應學生問題: 這個功能不僅可以即時解答學生的問題,還可以減輕老師的負擔。
  2. 過濾問題: 能過濾並指導學生如何更有效地提問,是一個對教師非常有幫助的功能。
  3. 引導學生思考: 這是最讓人印象深刻的部分,因為不僅解答了問題,還教會了學生如何解決問題。

這個專案不僅具有高度的實用性,也很有教育意義。它不只是一個問答工具,更是一個能夠協助教學和學習的平台。

參考資料